package disco;

import java.util.*;


/*
 * DispatchQueue es una zona critica, que tiene asociados problemas
 * de exclusion mutua y sincronizacion. El problema de exclusion mutua
 * sera resuelto con el uso de monitores, mientras que la sincronizacion se
 * resolvera con
 */
public class DispatchQueue {
    
    Queue<CFQRequest> listaPeticiones=new LinkedList<CFQRequest>();
    private int count = 0;
    private int n = 0;

    public synchronized CFQRequest get() {
        while (count <= 0) {
            try {
                wait();
            } catch (InterruptedException e) {
            }
        }
        count --;
        return listaPeticiones.remove();
    }

    public synchronized void put(CFQRequest request) {
        n++;
//        System.out.println(n);
        count ++;        
        listaPeticiones.add(request);
        if (count == 1){
            notify();
        }
    }
}
